/* Promise 将多个 Promise 顺序执行、全部完成、只有一个完成 */
// 创建三个不同的 Promise 函数
function fn1() {
  // 返回 Promise 对象
  return new Promise((resolve, reject) => {
    if (2 > 1) {
      // 成功执行 异步方法
      setTimeout(() => resolve("f1 成功"), 1000);
    } else {
      // 失败返回提示
      reject("f1 失败");
    }
  });
}
function fn2() {
  // 返回 Promise 对象
  return new Promise((resolve, reject) => {
    if (2 > 1) {
      // 成功执行 异步方法
      setTimeout(() => resolve("f2 成功"), 500);
    } else {
      // 失败返回提示
      reject("f2 失败");
    }
  });
}
function fn3() {
  // 返回 Promise 对象
  return new Promise((resolve, reject) => {
    if (2 > 1) {
      // 成功执行 异步方法
      setTimeout(() => resolve("f3 成功"), 200);
    } else {
      // 失败返回提示
      reject("f3 失败");
    }
  });
}

/* 顺序执行（异步模块 等待上一个运行完成再接着下一个） */
async function executePromises(promises) {
  console.log("这是顺序执行：");
  for (const promise of promises) {
    try {
      // 等待上一个运行完成再接着下一个
      const promiseResult = await promise;
      // 输出 promise
      console.log(promiseResult);
    } catch (error) {
      console.log(error);
    }
  }
}
// // 调用执行函数并传入 Promise 函数 */
await executePromises([fn1(), fn2(), fn3()]);

// /* 全部完成 */
await Promise.all([fn1(), fn2(), fn3()])
  .then((res) => console.log("这是全部完成：\n", res))
  .catch((err) => console.log(err));

// /* 只有一个完成 */
Promise.race([fn1(), fn2(), fn3()])
  .then((res) => console.log("这是只有一个完成：\n", res))
  .catch((err) => console.log(err));
